// 函数表达式的 name 优先取自于匿名函数的命名，如果没有则取变量的 标识符
let fib = function fibonacci(n: number): number {
  if (n == 1 || n == 2) {
    return 1;
  }
  return fibonacci(n - 2) + fibonacci(n - 1);
};

console.log(fib.name);
fib(5);
const a = function (this: any) {
  console.log(this.x, this.y);
  return this;
};
interface IObj {
  x: number;
  y: number;
  a: (this: IObj) => this;
}
const objA: IObj = {
  x: 1,
  y: 2,
  a,
};
const objB: IObj = {
  x: 2,
  y: 3,
  a,
};
objA.a();
objB.a();
